﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Clases.Clases;
using Clases.Estructuras;
using AccesoBD;
using System.Data.Sql;
using System.Data;
using System.Data.SqlClient;

namespace Clases.ClasesPersistentes
{
    public class DaoMateria
    {
        public void insertarMateria(Materia pmateria)
        {

            List<Parametros> parametros = new List<Parametros>();

            Parametros tmp01 = new Parametros("nombre", pmateria.nombre);
            string cmdText = "INSERT INTO tcurso (nombre) VALUES (@nombre); SELECT SCOPE_IDENTITY();";

            parametros.Add(tmp01);

            AccesoBD.DBAccess acceso = new DBAccess();

            String idMateriaTxt = acceso.ejectutarSqlConScopeIdentity(cmdText, parametros);
            int idMateria = Int32.Parse(idMateriaTxt);
            Carrera carreraMadre = pmateria.carrera;
            int idCarrera = carreraMadre.idCarrera;
            insertarMateriaACarrera(idCarrera, idMateria);

        }

        public void insertarMateriaACarrera(int idCarrera, int idMateria)
        {
            List<Parametros> parametros = new List<Parametros>();

            Parametros tmp01 = new Parametros("id_carrera", idCarrera);
            Parametros tmp02 = new Parametros("id_curso", idMateria);
            string cmdText = "INSERT INTO tcarrera_curso (id_carrera, id_curso) VALUES (@id_carrera, @id_curso)";

            parametros.Add(tmp01);
            parametros.Add(tmp02);

            AccesoBD.DBAccess acceso = new DBAccess();

            acceso.ejecutarSQL(cmdText, parametros);
        }

        public List<StrMateria> listarMateriasPorCarrera(Carrera pcarrera)
        {
            StrMateria tmpMateria = new StrMateria();
            List<StrMateria> listaMaterias = new List<StrMateria>();
            try
            {
                List<Parametros> parametros = new List<Parametros>();

                Parametros tmp01 = new Parametros("@valor01", pcarrera.nombre);
                parametros.Add(tmp01);
                String cmdText = "SELECT tcurso.id_curso, tcurso.nombre FROM tcarrera INNER JOIN tcarrera_curso ON tcarrera.id_Carrera = tcarrera_curso.id_carrera INNER JOIN tcurso ON tcarrera_curso.id_curso = tcurso.id_curso WHERE tcarrera.nombre = @valor01";
                AccesoBD.DBAccess acceso = new DBAccess();
                SqlDataReader reader = acceso.ejecutarSelect(cmdText, parametros);

                while (reader.Read())
                {
                    tmpMateria.idMateria = (int)reader.GetValue(0);
                    tmpMateria.nombre = reader.GetValue(1).ToString();

                    listaMaterias.Add(tmpMateria);
                }

                reader.Close();
                return listaMaterias;
            }
            catch (SqlException e)
            {
                throw e;
            }
        }


        public List<StrMateria> buscarMateriasAprox(String pnombreMateria)
        {
            StrMateria tmpMateria = new StrMateria();
            List<StrMateria> listaMaterias = new List<StrMateria>();
            try
            {
                String cmdText = "SELECT id_curso, nombre from tcurso WHERE (nombre LIKE '%' + @valor01 + '%')";
                Parametros tmpParametro;
                List<Parametros> parametros;
                parametros = new List<Parametros>();
                tmpParametro = new Parametros("@valor01", pnombreMateria);
                parametros.Add(tmpParametro);
                AccesoBD.DBAccess acceso = new DBAccess();
                SqlDataReader reader = acceso.ejecutarSelect(cmdText, parametros);

                while (reader.Read())
                {
                    tmpMateria.idMateria = (int)reader.GetValue(0);
                    tmpMateria.nombre = reader.GetValue(1).ToString();

                    listaMaterias.Add(tmpMateria);
                }

                reader.Close();
                return listaMaterias;
            }
            catch (SqlException e)
            {
                throw e;
            }
        }

        public Materia buscarMateria(String pnombreMateria)
        {
            Materia tmpMateria = new Materia();
            try
            {
                String cmdText = "SELECT id_curso, nombre FROM tcurso where nombre = @valor01";
                Parametros tmpParametro;
                List<Parametros> parametros;
                parametros = new List<Parametros>();
                tmpParametro = new Parametros("@valor01", pnombreMateria);
                parametros.Add(tmpParametro);
                AccesoBD.DBAccess acceso = new DBAccess();
                SqlDataReader reader = acceso.ejecutarSelect(cmdText, parametros);

                while (reader.Read())
                {
                    tmpMateria.idMateria = (int)reader.GetValue(0);
                    tmpMateria.nombre = reader.GetValue(1).ToString();
                  
                }
                reader.Close();
                
                return tmpMateria;
            }
            catch (SqlException e)
            {
                throw e;
            }
        }
    }
}
